package com.data.center.util;

import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.util.Date;
import java.util.Random;

public class RandomDataToExcelUtils {

    public static void main(String[] args) {
        String fileName = ".\\source\\Person\\Person测试用例.xlsx"; // Excel文件名（相对路径）
        int numRows = 100; // 要生成的数据行数

        try (Workbook workbook = new XSSFWorkbook()) {
            Sheet sheet = workbook.createSheet("Sheet1");

            // 写入表头
            Row headerRow = sheet.createRow(0);
            String[] headers = {"人才ID", "姓名", "证件类型", "证件号码", "STID", "性别", "出生日期", "民族", "国籍", "籍贯",
                    "政治面貌", "证件照片", "生活照片", "工作单位", "所在部门", "行政级别", "行政职务", "专业技术职务",
                    "毕业院校", "所学专业", "最高学历", "最高学位", "学科", "科研属性", "研究方向", "所在地",
                    "详细地址", "邮政编码", "手机", "传真", "邮箱", "电话", "联系人姓名", "联系人手机", "联系人电话",
                    "银行卡号", "开户行", "开户网点", "开户人", "实名认证状态", "认证人", "认证时间", "个人状态",
                    "修改人", "最后修改时间"};
            for (int i = 0; i < headers.length; i++) {
                headerRow.createCell(i).setCellValue(headers[i]);
            }

            // 生成随机数据并写入Excel
            for (int i = 1; i <= numRows; i++) {
                Row row = sheet.createRow(i);
                // 生成随机数据
                String personId = ""; // 人才ID
                String name = generateRandomName(); // 姓名
                String nationalIdType = ""; // 证件类型
                String nationalId = generateRandomNationalId(); // 证件号码
                String stid = ""; // STID
                String gender = ""; // 性别
                Date dob = null; // 出生日期
                String ethnicGroup = ""; // 民族
                String nationality = ""; // 国籍
                String birthplace = ""; // 籍贯
                String politicalAffiliation = ""; // 政治面貌
                String idPhoto = ""; // 证件照片
                String lifePhoto = ""; // 生活照片
                String affiliation = ""; // 工作单位
                String department = ""; // 所在部门
                String positionRank = ""; // 行政级别
                String position = ""; // 行政职务
                String title = ""; // 专业技术职务
                String graduation = ""; // 毕业院校
                String major = ""; // 所学专业
                String education = ""; // 最高学历
                String degree = ""; // 最高学位
                String disciplines = ""; // 学科
                String category = ""; // 科研属性
                String keywords = ""; // 研究方向
                String division = ""; // 所在地
                String address = ""; // 详细地址
                String postCode = ""; // 邮政编码
                String mobile = generateRandomMobileNumber(); // 手机
                String fax = ""; // 传真
                String email = ""; // 邮箱
                String phone = ""; // 电话
                String contactName = ""; // 联系人姓名
                String contactMobile = ""; // 联系人手机
                String contactPhone = ""; // 联系人电话
                String account = ""; // 银行卡号
                String bank = ""; // 开户行
                String branch = ""; // 开户网点
                String accountOwner = ""; // 开户人
                String authentication = generateRandomAuthentication(); // 实名认证状态
                String authenticator = ""; // 认证人
                Date authenticateTime = null; // 认证时间
                String status = ""; // 个人状态
                String modifier = ""; // 修改人
                Date lastModifiedTime = null; // 最后修改时间

                // 写入数据到Excel
                row.createCell(0).setCellValue(personId);
                row.createCell(1).setCellValue(name);
                row.createCell(2).setCellValue(nationalIdType);
                row.createCell(3).setCellValue(nationalId);
                row.createCell(4).setCellValue(stid);
                row.createCell(5).setCellValue(gender);
                row.createCell(6).setCellValue(dob != null ? dob.toString() : "");
                row.createCell(7).setCellValue(ethnicGroup);
                row.createCell(8).setCellValue(nationality);
                row.createCell(9).setCellValue(birthplace);
                row.createCell(10).setCellValue(politicalAffiliation);
                row.createCell(11).setCellValue(idPhoto);
                row.createCell(12).setCellValue(lifePhoto);
                row.createCell(13).setCellValue(affiliation);
                row.createCell(14).setCellValue(department);
                row.createCell(15).setCellValue(positionRank);
                row.createCell(16).setCellValue(position);
                row.createCell(17).setCellValue(title);
                row.createCell(18).setCellValue(graduation);
                row.createCell(19).setCellValue(major);
                row.createCell(20).setCellValue(education);
                row.createCell(21).setCellValue(degree);
                row.createCell(22).setCellValue(disciplines);
                row.createCell(23).setCellValue(category);
                row.createCell(24).setCellValue(keywords);
                row.createCell(25).setCellValue(division);
                row.createCell(26).setCellValue(address);
                row.createCell(27).setCellValue(postCode);
                row.createCell(28).setCellValue(mobile);
                row.createCell(29).setCellValue(fax);
                row.createCell(30).setCellValue(email);
                row.createCell(31).setCellValue(phone);
                row.createCell(32).setCellValue(contactName);
                row.createCell(33).setCellValue(contactMobile);
                row.createCell(34).setCellValue(contactPhone);
                row.createCell(35).setCellValue(account);
                row.createCell(36).setCellValue(bank);
                row.createCell(37).setCellValue(branch);
                row.createCell(38).setCellValue(accountOwner);
                row.createCell(39).setCellValue(authentication);
                row.createCell(40).setCellValue(authenticator);
                row.createCell(41).setCellValue(authenticateTime != null ? authenticateTime.toString() : "");
                row.createCell(42).setCellValue(status);
                row.createCell(43).setCellValue(modifier);
                row.createCell(44).setCellValue(lastModifiedTime != null ? lastModifiedTime.toString() : "");
            }

            // 保存Excel文件
            try (FileOutputStream outputStream = new FileOutputStream(fileName)) {
                workbook.write(outputStream);
                System.out.println("Excel file generated successfully.");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    // 生成随机中文姓名
    private static String generateRandomName() {
        Random random = new Random();
        // 姓氏使用常见的100个姓氏
        String[] lastNames = {
                "赵", "钱", "孙", "李", "周", "吴", "郑", "王", "冯", "陈",
                "褚", "卫", "蒋", "沈", "韩", "杨", "朱", "秦", "尤", "许",
                "何", "吕", "施", "张", "孔", "曹", "严", "华", "金", "魏",
                "陶", "姜", "戚", "谢", "邹", "喻", "柏", "水", "窦", "章",
                "云", "苏", "潘", "葛", "奚", "范", "彭", "郎", "鲁", "韦",
                "昌", "马", "苗", "凤", "花", "方", "俞", "任", "袁", "柳",
                "酆", "鲍", "史", "唐", "费", "廉", "岑", "薛", "雷", "贺",
                "倪", "汤", "滕", "殷", "罗", "毕", "郝", "邬", "安", "常",
                "乐", "于", "时", "傅", "皮", "卞", "齐", "康", "伍", "余",
                "元", "卜", "顾", "孟", "平", "黄", "和", "穆", "萧", "尹"
        };
        // 名字使用常见的100个名字
        String[] firstNames = {
                "伟", "芳", "娜", "秀英", "敏", "静", "丽", "强", "磊", "军",
                "洋", "勇", "艳", "杰", "娟", "涛", "明", "超", "秀兰", "霞",
                "平", "刚", "桂英", "欣", "亮", "桂芳", "丹", "辉", "桂珍", "月",
                "兰", "建国", "建华", "冬梅", "丽华", "国强", "文", "建军", "玉",
                "小红", "桂荣", "小刚", "刚", "小丽", "龙", "文华", "云", "洪",
                "小敏", "小强", "春梅", "燕", "小亮", "全华", "桂芝", "金凤", "丽霞",
                "国庆", "淑珍", "小龙", "秋香", "欢", "小敏", "小军", "小丽", "金花",
                "月", "小强", "小丽", "小刚", "小敏", "小龙", "小红", "小芳", "小杰",
                "娟", "建军", "建华", "月", "玲", "小敏", "小刚", "小丽", "小敏", "小刚"
        };

        // 随机选择一个姓氏和一个名字
        String firstName = firstNames[random.nextInt(firstNames.length)];
        String lastName = lastNames[random.nextInt(lastNames.length)];
        return lastName + firstName;
    }

    // 生成随机18位数字身份证号码
    private static String generateRandomNationalId() {
        // 随机生成18位数字作为身份证号码
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 18; i++) {
            int digit = (int) (Math.random() * 10);
            sb.append(digit);
        }
        return sb.toString();
    }

    // 生成随机手机号码
    private static String generateRandomMobileNumber() {
        // 随机生成11位数字作为手机号码
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 11; i++) {
            int digit = (int) (Math.random() * 10);
            sb.append(digit);
        }
        return sb.toString();
    }

    // 生成随机实名认证状态
    private static String generateRandomAuthentication() {
//        // 随机生成01、02、11、12四个中的随机一个（二/三要素认证）
//        String[] authStatus = {"01", "02", "11", "12"};
//        Random random = new Random();
//        return authStatus[random.nextInt(authStatus.length)];

        // 生成未认证状态（00）
        return "02";
    }
}
